const http = require("http");
const fs = require("fs");
const qs = require("querystring");


http.createServer((req, res) => {
    if (req.url !== "/favicon.ico") {
        if (req.url.includes("/api")) {
            dataRequire(req, res)
        } else {
            fileRequire(req, res)
        }
    }
}).listen(9080);


function dataRequire(req, res) {
    let str = "";
    req.on("data", (c) => {
        str += c
    })
    req.on("end", () => {
        let dataObj = null;
        if (str) {
            dataObj = qs.parse(str);
        } else {
            dataObj = qs.parse(req.url.split("?")[1]);
        }

        switch (dataObj.type) {
            case "goods":
                goods(req, res, dataObj); break;
            case "login":
                login(req, res, dataObj); break;
            case "register":
                register(req, res, dataObj); break;
        }
    })
}

// 模拟数据库存储用户信息
// 一个对象表示一个用户
// const userMsg = [{username:"admin",password:123456},{},{}，...];
const userMsg = [];

function register(req, res, dataObj) {
    // console.log(dataObj);
    // console.log("正在登录");
    let i = 0;
    const flag = userMsg.some((val, idx) => val.username === dataObj.username);
    const obj = {};
    if (flag) {
        if (userMsg[i].password === dataObj.password) {
            // 登录成功
            obj.code = 1;
            obj.title = "登录成功";
            obj.data = dataObj.username;
        } else {
            // 密码不对
            obj.code = 0;
            obj.title = "用户名密码不符";
            obj.data = "NOT DATA";
        }
    } else {
        // 账号不存在
        obj.code = 2;
        obj.title = "用户名不存在";
        obj.data = "NOT DATA";
    }
    res.write(JSON.stringify(obj));
    res.end();
}

function goods(req, res, dataObj) {
    fs.readFile("./data/goods.json", "utf-8", (err, data) => {
        let msg;
        if (err) {
            msg = { code: 400, title: "请求失败", data: "NOT DATA" }
        } else {
            msg = { code: 200, title: "请求成功", data: JSON.parse(data) }
        }
        res.write(JSON.stringify(msg));
        res.end();
    })
}

function fileRequire(req, res) {
    const myURL = new URL("http://localhost:3000" + req.url);
    fs.readFile("./www" + myURL.pathname, (err, data) => {
        if (err) {
            res.write("404");
        } else {
            res.write(data);
        }
        res.end();
    })
}


// 登录功能（先读文件，比对用户信息）
function login(req, res, reqData){
    fs.readFile("./data/user.json", "utf-8", (err, data)=>{
        const users = JSON.parse(data);
        let i = 0;
        const flag = users.some((val,idx)=>{
            i = idx;
            return val.username === reqData.username;
        })

        const obj = {};
        if(flag){
            if(users[i].password === reqData.password){
                // 登录成功
                obj.code = 1;
                obj.title = "登录成功";
                obj.data = reqData.username;
            }else{
                // 密码不对
                obj.code = 2;
                obj.title = "登录失败，密码不对";
                obj.data = "NOT DATE";
            }
        }else{
            // 没有找到用户名
            obj.code = 0;
            obj.title = "登录失败，用户名不存在";
            obj.data = "NOT DATE";
        }
        // 直接返回前端
        res.write(JSON.stringify(obj));
        res.end();
    })
}

// 注册功能（先读文件，再写文件）
function register(req, res, reqData){
    fs.readFile("./data/user.json", "utf-8", (err, data)=>{
        const users = JSON.parse(data);
        // 判断是否重名
        const flag = users.some(val=>val.username === reqData.username);
        const obj = {};
        if(flag){
            obj.code = 0;
            obj.title = "注册失败，用户名重名";
            obj.data = "NOT DATE";
            // 直接返回前端
            res.write(JSON.stringify(obj));
            res.end();
        }else{
            users.push({
                username: reqData.username,
                password: reqData.password
            })
            obj.code = 1;
            obj.title = '注册成功';
            obj.data = "NOT DATE";
            // 先将用户数据写入数据库
            fs.writeFile("./data/user.json", JSON.stringify(users), ()=>{
                // 写入数据库之后，再返回前端
                res.write(JSON.stringify(obj));
                res.end();
            })
        }
    })
}

// // 查询数据库中 商品数据 的功能
// function getPro(req, res, reqData){
//     fs.readFile("./data/getPro.json", "utf-8", (err, data)=>{
//         const obj = {};
//         if(err){
//             obj.code = 0;
//             obj.title = "读取失败";
//             obj.data = [];
//         }else{
//             obj.code = 1;
//             obj.title = '读取成功';
//             obj.data = JSON.parse(data);
//         }
//         res.write(JSON.stringify(obj));
//         res.end();
//     })
// }


// function fileReq(req,res){
//     const urlObj = new URL("http://localhost:3000" + req.url);
//     fs.readFile("./www" + urlObj.pathname, (err,data)=>{
//         if(err){
//             res.write("404");
//         }else{
//             res.write(data);
//         }
//         res.end();
//     })
// }